JavaScript 中的一些小技巧
•
# JavaScript 中的一些小技巧
## 使用扩展运算符`[...str]`代替 `str.split('')`
```javascript
const str = '😊'
console.log(str.split('')) // ['\uD83D', '\uDE0A']
console.log([...str]) // ['😊']
```
UTF-16 所能表示的 65,536 个字符不足以涵盖世界上所有的字符,为了表示超出这个范围的字符,Unicode 引入了代理对(Surrogate Pairs)。
- 码元 (Code Unit): UTF-16 编码中的基本单元,固定为 16 位。一个代理对包含两个码元。
- 码点 (Code Point): Unicode 中赋予一个字符的唯一编号。一个表情符号(如 😊)只有一个码点 (U+1F60A),但它需要用两个码元 (\uD83D 和 \uDE0A) 来表示。
ECMAScript 6 (ES6) 在发布时,重新定义了字符串的迭代方式。扩展运算符 (...) 正是利用了这套全新的、更完善的迭代协议,从而能够“智能地”处理包括代理对(Surrogate Pairs)在内的复杂字符。
> https://attio.com/engineering/blog/javascript-string-slice-considered-harmful